home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / tsipp / tsipp.lha / tsipp3.0a / demos / isy90.tcl < prev    next >
Encoding:
Text File  |  1992-11-02  |  9.4 KB  |  215 lines

  1. #==============================================================================
  2. #                                 isy90.tcl
  3. #------------------------------------------------------------------------------
  4. # A port of SIPP demo program isy90.c to Tcl-SIPP.
  5. #------------------------------------------------------------------------------
  6. # $Id: isy90.tcl,v 2.0 1992/11/02 03:55:23 markd Rel $
  7. #------------------------------------------------------------------------------
  8.  
  9. source util.tcl
  10. ParseArgs 3
  11.  
  12. set M_PI           3.14159265358979323846
  13. set BEZ_RES        9
  14. set CYL_RES        40
  15. set LID_ROT        1.5
  16. set BLOCK_SIZE     1.2
  17. set NCYL           16
  18. set CYL_LEN        5.0
  19. set SMALL_CYL_RAD  [expr {(($BLOCK_SIZE * $M_PI) / ($NCYL * 2))}]
  20. set BIG_CYL_RAD    [expr {(0.5 * $BLOCK_SIZE - 1.1 * $SMALL_CYL_RAD)}]
  21.  
  22. proc TeapotSpout {resolution shader} {
  23.     set vertexList {
  24.         {7.000000E-01     3.750000E-02    5.625000E-01}
  25.         {7.250000E-01     3.750000E-02    5.812500E-01}
  26.         {7.000000E-01     6.250000E-02    5.812500E-01}
  27.         {6.750000E-01     6.250000E-02    5.625000E-01}
  28.         {5.750000E-01     6.250000E-02    4.875000E-01}
  29.         {6.500000E-01     1.650000E-01    3.187500E-01}
  30.         {4.250000E-01     1.650000E-01    3.187500E-01}
  31.         {8.000000E-01     3.750000E-02    5.625000E-01}
  32.         {8.625000E-01     3.750000E-02    5.906250E-01}
  33.         {8.812500E-01     6.250000E-02    5.859375E-01}
  34.         {8.250000E-01     6.250000E-02    5.625000E-01}
  35.         {6.000000E-01     6.250000E-02    4.687500E-01}
  36.         {7.750000E-01     1.650000E-01    1.687500E-01}
  37.         {4.250000E-01     1.650000E-01    1.125000E-01}
  38.         {8.000000E-01    -0.000000E+00    5.625000E-01}
  39.         {8.625000E-01    -0.000000E+00    5.906250E-01}
  40.         {8.812500E-01    -0.000000E+00    5.859375E-01}
  41.         {8.250000E-01    -0.000000E+00    5.625000E-01}
  42.         {6.000000E-01    -0.000000E+00    4.687500E-01}
  43.         {7.750000E-01    -0.000000E+00    1.687500E-01}
  44.         {4.250000E-01    -0.000000E+00    1.125000E-01}
  45.         {8.000000E-01    -3.750000E-02    5.625000E-01}
  46.         {8.625000E-01    -3.750000E-02    5.906250E-01}
  47.         {8.812500E-01    -6.250000E-02    5.859375E-01}
  48.         {8.250000E-01    -6.250000E-02    5.625000E-01}
  49.         {6.000000E-01    -6.250000E-02    4.687500E-01}
  50.         {7.750000E-01    -1.650000E-01    1.687500E-01}
  51.         {4.250000E-01    -1.650000E-01    1.125000E-01}
  52.         {7.000000E-01    -3.750000E-02    5.625000E-01}
  53.         {7.250000E-01    -3.750000E-02    5.812500E-01}
  54.         {7.000000E-01    -6.250000E-02    5.812500E-01}
  55.         {6.750000E-01    -6.250000E-02    5.625000E-01}
  56.         {5.750000E-01    -6.250000E-02    4.875000E-01}
  57.         {6.500000E-01    -1.650000E-01    3.187500E-01}
  58.         {4.250000E-01    -1.650000E-01    3.187500E-01}
  59.         {7.000000E-01    -0.000000E+00    5.625000E-01}
  60.         {7.250000E-01    -0.000000E+00    5.812500E-01}
  61.         {7.000000E-01    -0.000000E+00    5.812500E-01}
  62.         {6.750000E-01    -0.000000E+00    5.625000E-01}
  63.         {5.750000E-01    -0.000000E+00    4.875000E-01}
  64.         {6.500000E-01    -0.000000E+00    3.187500E-01}
  65.         {4.250000E-01    -0.000000E+00    3.187500E-01}}
  66.     set patchList {
  67.         {{ 3  4  5  6}    {38 39 40 41}    {31 32 33 34}    {24 25 26 27}}
  68.         {{21 22 23 24}    {14 15 16 17}    { 7  8  9 10}    { 0  1  2  3}}
  69.         {{ 0  1  2  3}    {35 36 37 38}    {28 29 30 31}    {21 22 23 24}}
  70.         {{24 25 26 27}    {17 18 19 20}    {10 11 12 13}    { 3  4  5  6}}}
  71.     return [SippBezierPatch $resolution $vertexList $patchList $shader WORLD]
  72. }
  73.  
  74. proc TeapotLid {resolution shader} {
  75.     set vertexList {
  76.         {3.500000E-01    0.000000E+00    5.625000E-01}
  77.         {3.250000E-01    0.000000E+00    6.000000E-01}
  78.         {1.000000E-01    0.000000E+00    6.000000E-01}
  79.         {5.000000E-02    0.000000E+00    6.375000E-01}
  80.         {0.000000E+00    0.000000E+00    6.750000E-01}
  81.         {2.000000E-01    0.000000E+00    7.500000E-01}
  82.         {0.000000e+00    0.000000e+00    7.500000e-01}}
  83.     set curveList {
  84.         {3 4 5 6}
  85.         {0 1 2 3}}
  86.     return [SippBezierCurve $resolution $vertexList $curveList $shader WORLD]
  87. }
  88.  
  89. proc TeapotHandle {resolution shader} {
  90.     set vertexList {
  91.         {-4.750000E-01    -7.500000E-02    1.125000E-01}
  92.         {-6.625000E-01    -7.500000E-02    1.968750E-01}
  93.         {-7.500000E-01    -7.500000E-02    3.000000E-01}
  94.         {-7.500000E-01    -7.500000E-02    4.125000E-01}
  95.         {-7.500000E-01    -7.500000E-02    5.250000E-01}
  96.         {-6.250000E-01    -7.500000E-02    5.250000E-01}
  97.         {-3.750000E-01    -7.500000E-02    5.250000E-01}
  98.         {-5.000000E-01    -7.500000E-02    1.875000E-01}
  99.         {-6.250000E-01    -7.500000E-02    2.437500E-01}
  100.         {-6.750000E-01    -7.500000E-02    3.562500E-01}
  101.         {-6.750000E-01    -7.500000E-02    4.125000E-01}
  102.         {-6.750000E-01    -7.500000E-02    4.687500E-01}
  103.         {-5.750000E-01    -7.500000E-02    4.687500E-01}
  104.         {-4.000000E-01    -7.500000E-02    4.687500E-01}
  105.         {-5.000000E-01    -0.000000E+00    1.875000E-01}
  106.         {-6.250000E-01    -0.000000E+00    2.437500E-01}
  107.         {-6.750000E-01    -0.000000E+00    3.562500E-01}
  108.         {-6.750000E-01    -0.000000E+00    4.125000E-01}
  109.         {-6.750000E-01    -0.000000E+00    4.687500E-01}
  110.         {-5.750000E-01    -0.000000E+00    4.687500E-01}
  111.         {-4.000000E-01    -0.000000E+00    4.687500E-01}
  112.         {-5.000000E-01     7.500000E-02    1.875000E-01}
  113.         {-6.250000E-01     7.500000E-02    2.437500E-01}
  114.         {-6.750000E-01     7.500000E-02    3.562500E-01}
  115.         {-6.750000E-01     7.500000E-02    4.125000E-01}
  116.         {-6.750000E-01     7.500000E-02    4.687500E-01}
  117.         {-5.750000E-01     7.500000E-02    4.687500E-01}
  118.         {-4.000000E-01     7.500000E-02    4.687500E-01}
  119.         {-4.750000E-01     7.500000E-02    1.125000E-01}
  120.         {-6.625000E-01     7.500000E-02    1.968750E-01}
  121.         {-7.500000E-01     7.500000E-02    3.000000E-01}
  122.         {-7.500000E-01     7.500000E-02    4.125000E-01}
  123.         {-7.500000E-01     7.500000E-02    5.250000E-01}
  124.         {-6.250000E-01     7.500000E-02    5.250000E-01}
  125.         {-3.750000E-01     7.500000E-02    5.250000E-01}
  126.         {-4.750000E-01    -0.000000E+00    1.125000E-01}
  127.         {-6.625000E-01    -0.000000E+00    1.968750E-01}
  128.         {-7.500000E-01    -0.000000E+00    3.000000E-01}
  129.         {-7.500000E-01    -0.000000E+00    4.125000E-01}
  130.         {-7.500000E-01    -0.000000E+00    5.250000E-01}
  131.         {-6.250000E-01    -0.000000E+00    5.250000E-01}
  132.         {-3.750000E-01    -0.000000E+00    5.250000E-01}}
  133.     set patchList {
  134.         {{ 6  5  4  3}    {13 12 11 10}    {20 19 18 17}    {27 26 25 24}}
  135.         {{ 0  1  2  3}    {35 36 37 38}    {28 29 30 31}    {21 22 23 24}}
  136.         {{21 22 23 24}    {14 15 16 17}    { 7  8  9 10}    { 0  1  2  3}}
  137.         {{ 3  4  5  6}    {38 39 40 41}    {31 32 33 34}    {24 25 26 27}}}
  138.     return [SippBezierPatch $resolution $vertexList $patchList $shader WORLD]
  139. }
  140.  
  141. proc TeapotBody {resolution shader} {
  142.     set vertexList {
  143.         {3.750000E-01    0.000000E+00    0.000000E+00}
  144.         {3.750000E-01    0.000000E+00    1.875000E-02}
  145.         {5.000000E-01    0.000000E+00    7.500000E-02}
  146.         {5.000000E-01    0.000000E+00    1.875000E-01}
  147.         {5.000000E-01    0.000000E+00    3.000000E-01}
  148.         {4.375000E-01    0.000000E+00    4.312500E-01}
  149.         {3.750000E-01    0.000000E+00    5.625000E-01}
  150.         {3.593750E-01    0.000000E+00    5.953125E-01}
  151.         {3.343750E-01    0.000000E+00    5.953125E-01}
  152.         {3.500000E-01    0.000000E+00    5.625000E-01}}
  153.     set curveList {
  154.         {6 7 8 9}
  155.         {0 1 2 3}
  156.         {3 4 5 6}}
  157.     return [SippBezierCurve $resolution $vertexList $curveList $shader WORLD]
  158. }
  159.  
  160.  
  161. set marble [SippShaderMarble 0.4 0.5 0.05 8.0 {0.90 0.80 0.65} \
  162.                              {0.30 0.08 0.08} {1.0 1.0 1.0}]
  163. set granite [SippShaderGranite 0.4 0.1 0.4 20.0 {0.647 0.565 0.5} \
  164.                                {0.15 0.12 0.10} {1.0 1.0 1.0}]
  165.  
  166. set sampling 1
  167.  
  168. SippShadows TRUE [expr (($G_size<512)?2*$G_size:$G_size)]
  169.  
  170. set handle [TeapotHandle $BEZ_RES $marble]
  171. set spout  [TeapotSpout  $BEZ_RES $marble]
  172. set body   [TeapotBody   $BEZ_RES $marble]
  173. set lid    [TeapotLid    $BEZ_RES $marble]
  174.  
  175. SippObjectRotateZ $lid $LID_ROT
  176.  
  177. set teapot [SippObjectCreate]
  178. SippObjectAddSubobj $teapot $body
  179. SippObjectAddSubobj $teapot $lid
  180. SippObjectAddSubobj $teapot $handle
  181. SippObjectAddSubobj $teapot $spout
  182.  
  183. SippObjectAddSubobj WORLD $teapot
  184.  
  185. set column [SippObjectCreate]
  186. set tmp [SippBlock [list $BLOCK_SIZE $BLOCK_SIZE [expr $BLOCK_SIZE/4.0]] \
  187.                    $granite WORLD]
  188. SippObjectMove $tmp [list 0.0 0.0 [expr -$BLOCK_SIZE/8.0]]
  189. SippObjectAddSubobj $column $tmp
  190.  
  191. for {set idx  0} {$idx < $NCYL} {incr idx} {
  192.     if {$idx == 0} {
  193.         set tmp [SippCylinder $SMALL_CYL_RAD $CYL_LEN $CYL_RES $granite WORLD]
  194.     } else {
  195.         set tmp [SippObjectInstance $tmp]
  196.     }
  197.     set xDist [expr {$BIG_CYL_RAD * [cos {$idx * 2.0 * $M_PI / $NCYL}]}]
  198.     set yDist [expr {$BIG_CYL_RAD * [sin {$idx * 2.0 * $M_PI / $NCYL}]}]
  199.     set zDist [expr {-0.5 * ($CYL_LEN + $BLOCK_SIZE / 4.0)}]
  200.  
  201.     SippObjectMove $tmp [list $xDist $yDist $zDist]
  202.     SippObjectAddSubobj $column $tmp
  203. }
  204.  
  205. SippObjectAddSubobj WORLD $column
  206.  
  207. SippLightSourceCreate {-3.0 -3.0 6.0} {0.35 0.35 0.35} DIRECTION
  208. SippSpotLightCreate {-3.0 -3.0 6.0} {0.0 0.0 0.0} 25.0 {0.45 0.45 0.45} \
  209.                      SHARP TRUE
  210. set camera [SippCameraCreate {2.0 -4.0 1.5} {0.0 0.0 0.1} \
  211.                              {0.0 0.0 1.0} 0.2]
  212. SippCameraUse $camera
  213.  
  214. DoRendering "isy90"
  215.